package com.zerro.litez.annotations.dao;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.METHOD;

/**
 * 没有sql参数时，根据参数名查询所有匹配项    <br>
 * 例如 param {id = 1, name = "alex"}    <br>
 * 则生成 sql: select * from [table] where id = 1 and name = 'alex' <br>
 * <b>参数名必须是实体类中的字段名</b> <br>
 * 没有参数时，则查询表中所有数据， sql: select * from [table]
 */
@Target(METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface Query {

    /**
     * 使用 @ 表示 表名，为 Dao 注解上声明的 实体类 <br>
     * 使用 ? 作为通配符，按方法参数顺序匹配， <br>
     * 例如 {select * from @ where id = ? and name = ?}, param {id = 1, name = "alex"} <br>
     * 使用?columnName 则按方法参数名匹配， <br>
     * 例如 {select * from @ where id = ?id and name = ?name}, param {name = "alex", id = 1}
     * 不要混用两种通配符
     */
    String sql() default "";
}
